﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DbGenerator.Utilities
{
    public static class SDbTypeUtilities
    {
        #region methods
        public static bool IsText(SqlDbType columnType)
        {
            return columnType == SqlDbType.Char
                || columnType == SqlDbType.NChar
                || columnType == SqlDbType.NText
                || columnType == SqlDbType.NVarChar
                || columnType == SqlDbType.Text
                || columnType == SqlDbType.VarChar;
        }
        public static bool IsNumeric(SqlDbType columnType)
        {
            return columnType == SqlDbType.TinyInt
                    || columnType == SqlDbType.BigInt
                    || columnType == SqlDbType.Decimal
                    || columnType == SqlDbType.Int
                    || columnType == SqlDbType.SmallInt;
        }
        public static bool IsBoolean(SqlDbType columnType)
        {
            return columnType == SqlDbType.Bit;
        }
        public static SqlDbType GetSqlDbType(string columnType)
        {
            switch (columnType)
            {
                case "bigint":
                    return SqlDbType.BigInt;
                case "bit":
                    return SqlDbType.Bit;
                case "binary":
                    return SqlDbType.Binary;
                case "char":
                    return SqlDbType.Char;
                case "datetime":
                    return SqlDbType.DateTime;
                case "decimal":
                    return SqlDbType.Decimal;
                case "float":
                    return SqlDbType.Float;
                case "image":
                    return SqlDbType.Image;
                case "int":
                    return SqlDbType.Int;
                case "money":
                    return SqlDbType.Money;
                case "nchar":
                    return SqlDbType.NChar;
                case "numeric":
                    return SqlDbType.Decimal;
                case "nvarchar":
                    return SqlDbType.NVarChar;
                case "real":
                    return SqlDbType.Real;
                case "smalldatetime":
                    return SqlDbType.SmallDateTime;
                case "smallint":
                    return SqlDbType.SmallInt;
                case "smallmoney":
                    return SqlDbType.SmallMoney;
                case "sql_variant":
                    return SqlDbType.Variant;
                case "text":
                    return SqlDbType.Text;
                case "timestamp":
                    return SqlDbType.Timestamp;
                case "tinyint":
                    return SqlDbType.TinyInt;
                case "uniqueidentifier":
                    return SqlDbType.UniqueIdentifier;
                case "varbinary":
                    return SqlDbType.VarBinary;
                case "varchar":
                    return SqlDbType.VarChar;
                case "xml":
                    return SqlDbType.Xml;
                default:
                    return SqlDbType.Int;
            }
        }
        public static string GetColumnType(SqlDbType dbType)
        {
            switch (dbType)
            {
                case SqlDbType.BigInt:
                    return "bigint";
                case SqlDbType.Bit:
                    return "bit";
                case SqlDbType.Binary:
                    return "binary";
                case SqlDbType.Char:
                    return "char";
                case SqlDbType.Date:
                    return "datetime";
                case SqlDbType.DateTime:
                    return "datetime";
                case SqlDbType.DateTime2:
                    return "datetime";
                case SqlDbType.DateTimeOffset:
                    return "datetime";
                case SqlDbType.Decimal:
                    return "numeric";
                case SqlDbType.Float:
                    return "float";
                case SqlDbType.Image:
                    return "image";
                case SqlDbType.Int:
                    return "int";
                case SqlDbType.Money:
                    return "money";
                case SqlDbType.NChar:
                    return "nchar";
                case SqlDbType.NText:
                    return "ntext";
                case SqlDbType.NVarChar:
                    return "nvarchar";
                case SqlDbType.Real:
                    return "real";
                case SqlDbType.SmallDateTime:
                    return "smalldatetime";
                case SqlDbType.SmallInt:
                    return "smallint";
                case SqlDbType.SmallMoney:
                    return "smallmoney";
                case SqlDbType.Structured:
                    return "";
                case SqlDbType.Text:
                    return "text";
                case SqlDbType.Time:
                    return "datetime";
                case SqlDbType.Timestamp:
                    return "bigint";
                case SqlDbType.TinyInt:
                    return "tinyint";
                case SqlDbType.Udt:
                    return "";
                case SqlDbType.UniqueIdentifier:
                    return "uniqueidentifier";
                case SqlDbType.VarBinary:
                    return "varbinary";
                case SqlDbType.VarChar:
                    return "varchar";
                case SqlDbType.Variant:
                    return "";
                case SqlDbType.Xml:
                    return "xml";
                default:
                    return "";
            }
        }

        #endregion
    }
}
